package cn.com.ninng;

import java.util.HashMap;
import java.util.Map;
import java.util.Stack;

/**
 * 给定一个只包括 '('，')'，'{'，'}'，'['，']' 的字符串 s ，判断字符串中的括号是否正确闭合。
 * @author liulekang
 * @createdate 2021/7/28
 */
public class Problem20 {

    public static void main(String[] args) {
        System.out.println(isValid("{[]}"));
    }



    public static boolean isValid(String s) {
        Map<Character, Character> maps = new HashMap<>();
        maps.put(')','(');
        maps.put('}','{');
        maps.put(']','[');
        char[] chars = s.toCharArray();
        Stack<Character> stack = new Stack<>();
        for (int i = 0; i < chars.length; i++) {
            char aChar = chars[i];
            //判断是否与栈顶元素匹配
            if(maps.containsKey(aChar)){
                //匹配则删除栈顶元素
                if (stack.isEmpty() || !maps.get(aChar).equals(stack.pop())) {
                    return false;
                }
            }else {
                //不匹配则入栈
                stack.push(aChar);
            }

        }
        return stack.isEmpty();

    }

}
